/*
Date:20210609 22:52PM
key:思路就是二分查找，不存在就返回0，找到对应位置就开始分别往左往右扫。
*/
class Solution {
public:
    int total(vector<int>& nums,int zuo)
    {
        int re=1;
        for(int i=zuo-1;i>-1;i--)
        {
            
            if(nums[i]==nums[zuo])
            {
                re++;
            }
            else{break;}
        }
        for(int i=zuo+1;i<nums.size();i++)
        {   
            
            if(nums[i]==nums[zuo])
            {
                re++;
            }else{break;}
        }
        return re;
    }
    int search1(vector<int>& nums, int target,int l,int r) 
    {
        int m=(l+r)>>1;
        int key=nums[m];
        //这里这个条件非常复杂，中间不存在(至少有两个数子)，最左不存在与最右不存在。
        if((nums.size()>1&&nums[l]<target&&nums[l+1]>target)||(nums[0]>target)||(nums[nums.size()-1]<target))
        {
            return 0;
        }
        if(key==target)
        {
            return total(nums,m);
        }
        if(key>target)
        {
            return search1(nums, target,l,m-1) ;
        }
        else{return search1(nums, target,m+1,r) ;}
    }
    int search(vector<int>& nums, int target) 
    {
        if(nums.size()==0){return 0;}
        return search1(nums, target,0,nums.size()-1) ;
    }
};